#include "base/core/os/mutex.h"
#define  CSSPINCOUNTS   5000

bool InitMutex(MUTEX_HANDLE * mutex_handle) 
{
	MMO_ASSERT(mutex_handle);
	if (!mutex_handle)
	{
		return false;
	}
	if (!InitializeCriticalSectionAndSpinCount(mutex_handle, CSSPINCOUNTS))
	{
		return false;
	}
	return true;
}

bool DeleteMutex(MUTEX_HANDLE * mutex_handle) 
{
	MMO_ASSERT(mutex_handle);
	if (!mutex_handle)
	{
		return false;
	}
	DeleteCriticalSection(mutex_handle);
	{
		return true; 
	}
}

bool LockMutex(MUTEX_HANDLE * mutex_handle) 
{
	MMO_ASSERT(mutex_handle);
	if (!mutex_handle)
	{
		return false;
	}
	EnterCriticalSection(mutex_handle);
	return true;
}

bool TryLockMutex(MUTEX_HANDLE * mutex_handle) 
{
	MMO_ASSERT(mutex_handle);
	if (!mutex_handle)
	{
		return false;
	}
	if (!TryEnterCriticalSection(mutex_handle))
	{
		return false;
	}
	return true;
}

bool UnlockMutex(MUTEX_HANDLE * mutex_handle) 
{
	MMO_ASSERT(mutex_handle);
	if (!mutex_handle)
	{
		return false;
	}
	LeaveCriticalSection(mutex_handle);
	return true;
}

